package com.neusoft.param;
/*
 * 课堂笔记：
 * 变量和操作符
 * 
 * 1、变量
 *    变量是值可以变化的量；是保存数据的基本单元。
 *    声明语法：
 *       变量类型  变量名 = 初始化值;
 *       也可以分开写：
 *       变量类型 变量名; // 声明
 *       变量名 = 初始化值; // 初始化
 *       变量类型就是java的数据类型。
 *    解析：
 *       java的变量必须先进行声明，才能使用；如果是局部变量使用之前需要先进行初始化；
 *       变量类型：（当前只做了解）
 *       在同一个作用于范围内，不能声明定义同名的多个变量；
 *       java中要求所有的局部变量在使用之前都需要进行声明和初始化；
 *       java中要求声明的局部变量必须先进行初始化之后才能使用；
 * 2、数据类型
 *   java种的数据类型分为：基本类型和引用类型（后面阐述）。
 *   基本类型（8种）：
 *   byte(1字节) short(2字节) int(4字节) long(8字节) --- 整形(默认类型为int)
 *   如果将一个给定的数表示为long类型，则需要添加后缀l或L。
 *   
 *   float(4字节) double(8字节) --- 浮点型（带小数）(默认类型为double)
 *   
 *   浮点数默认类型是double类型，如果将一个直接给定的浮点数表示float类型可以在数的后面添加后缀F或f；
 *   表示该数是一个float类型，而不是默认的double类型了。
 *   
 *   char(2字节)  --- 字符型（数值是ASCII码值）
 *   
 *   值一般使用''引出,单引号中只有一个字符。（Unicode编码除外）
 *   可以使用16进制的表示方式、Unicode编码的形式表示;
 *   char类型是一个无符号的整数。
 *   取值范围：英文字母、中文、数字、转义序列、特殊字符等
 *   转义字符的使用
 *   char类型可以向整型一样进行运算；
 *   
 *   boolean --- 布尔类型（只有true和false）0
 * 3、数据类型之间的转换
 *   默认转换(自动转换)
 *   
 *   范围小的低级的数据类型可以自动默认转换位范围大的高级的数据类型；
 *   整形范围：byte-->short-->int-->long
 *   浮点型:float-->double
 *   整型-->浮点型；
 *   char-->int-->long
 *   
 *   注意：
 *      1、在整型数中，给定的常数默认类型是int类型，但是如果给定的常数的值在当前类型的范围之内，
 *         可以直接进行赋值。例如: byte bVal1 = 2;
 *      2、在一个表达式中，表达式运算的最终结果的类型取决于表达式中的范围最大的最高类型；
 *        但是，当表达式是byte、short、char类型的混合形式时，运算结果是int类型；        
 *      3、在最高类型为整型表达式中，如果有除法运算中，如果运算结果中有小数，则小数部分会直接舍弃。（不是四舍五入，是直接丢弃）
 *      4、在表达式中可以通过()更改优先级，同数学中的()的作用。
 *      5、8种基本类型可以自动默认转换为字符串类型；+是字符串的拼接符号；
 *   
 *   强制转换
 *      将范围大的高级类型强制转换为范围小的级别低的类型；
 *      语法：
 *          目标类型  变量名  = (目标类型)表达式; // 表达式的类型范围比目标类型范围大（级别高）
 *   注意：
 *      1、进行强制转换时，可能会造成数据精度的丢失；
 *     
 *   
 *   自动类型转换不会造成数据的丢失；强制类型转换可能会造成数据的丢失；  
 */
public class TestParams {

	public static void main(String[] args) {
		// 变量声明和初始化：年龄
		int iAge = 20;
		iAge = 22;

		// 变量声明
		int iAge2;
		// 变量初始化
		iAge2 = 21;
		
		//如果将一个给定的数表示为long类型，则需要添加后缀l或L。
		long iAge3 = 99999999999999999l;
				
		// 变量的使用
		System.out.println("小明今年"+iAge2+"岁");
		//iAge3 = 25;
		
		long lAge = 1000;
		System.out.println("年龄："+lAge+" ");
		
		// 直接给定的整数默认类型为int类型
		//byte sAge = 128;
		// 浮点数默认类型是double类型
		float fPrice = 3.2f;
		
		//char类型
		char chPara1 = 'a';
		
		System.out.println("a的ASCII码值为："+(chPara1+0));	
		
		// char类型可以是中文
		char chParma2 = '你';
		
		// char类型可以使用Unicode编码表示
		char chParma3 = '\u03F7';
		System.out.println("Unicode码值为 \\u03A6是："+chParma3);
		
		char chParma4 = '\n';
		System.out.println("换行字符"+chParma4+"被换行了");
		
		// boolean类型取值只有true和false；
		boolean isOk = true;
		boolean isNg = false;
		
		/////////////////////////////////////////////////////////

		char chPara11 = 'a';
		// char类型默认转换为int类型
		int iChPara1 = chPara11;
		
		// char类型不能转换为short类型
		//short sChPara1 = chPara11;
		
		byte bVal1 = 127; // 初始值127在byte类型表示范围之内，所以可以直接赋值。
		// byte默认转为short类型
		short sVal1 = bVal1;
		
		// 表达式的类型是其中的最高类型
		int iVal1 = bVal1+sVal1+2+3*4;// 最高类型是int类型
		double dVal1 = bVal1+sVal1+2+3.0*4; // 最高类型是double类型
		
		int iVal21 = 5;
		int iVal22 = 2;
		int iVal23 = iVal21/iVal22;
		System.out.println("5/2="+iVal23);
		
		System.out.println("=================");
		iVal21 = 5;
		iVal22 = 2;
		double iVal24 = iVal21/iVal22; // 右侧计算结果是2，然后2再转换为浮点数2.0
		System.out.println("5/2="+iVal24);
		
		System.out.println("=================");
		iVal21 = 5;
		iVal22 = 2;
		double iVal25 = iVal21/(iVal22*1.0); // 右侧计算结果是2，然后2再转换为浮点数2.0
		System.out.println("5/2="+iVal25);
		
		// 字符串
		String strName = "小明";
		
		////////////////强制类型转/////////////////////////
		System.out.println("==============强制类型转换================");
		int iVal3 = 23;
		// 将int类型转换转为short类型之后，将转换之后的值赋值给short类型的变量；
		short sVal3 = (short) iVal3;
		System.out.println("int类型强制转换为short类型之后："+sVal3);
		
		iVal3 = 129;
		byte bVal3 = (byte)iVal3;
		System.out.println("int类型强制转换为bye类型之后："+bVal3);
		
		// 默认类型转换
		byte bVal41 = (byte)2;
		byte bVal42 = (byte)3;
		short sVal40 = (short) (bVal41+bVal42); // 两个byte类型的变量的表达式运算结果是int类型
		
		//short sVal41 = sVal40+bVal3; //当表达式是byte、short、char类型的混合形式时，运算结果是int类型； 
		
		char chVal40 = 'a';
		//short sVal42 = sVal40+chVal40;
		//short sVal43 = chVal40+'b';
		
		// 补充：char类型可以像整型一样进行运算
		char chVal50 = 'a';
		System.out.println("char类型（字符）："+chVal50);
		char chVal51 = 'a';
		System.out.println("char类型（数值）："+(int)chVal51);
		
		// char类型进行加法运算
		chVal50 = (char) (chVal50+1);
		System.out.println("char类型（字符）："+chVal50);
		System.out.println("char类型（数值）："+(int)chVal50);
		
		chVal50 = 'a';
		chVal51 = 'A';
		int diff = chVal50-chVal51;
		System.out.println("a-A="+diff);
	}

}
